package com.sscl.easyble.interfaces.connections

import android.bluetooth.BluetoothGattCharacteristic

/**
 * 写入大量数据时的回调
 *
 * @author jackie
 */
interface OnLargeCharacteristicDataWriteWithNotificationListener {

    /**
     * 启动失败
     */
    fun startFailed()

    /**
     * 开始发送数据
     */
    fun sendStarted()

    /**
     * 发送数据异常
     */
    fun writeDataError(currentIndex: Int, targetIndex: Int, gattState: Int, data: ByteArray)

    /**
     * 发送数据失败
     */
    fun sendFailed(currentIndex: Int, targetIndex: Int, data: ByteArray)

    /**
     * 发送进度变化
     */
    fun sendProgressChanged(currentIndex: Int, targetIndex: Int, bytes: ByteArray)

    /**
     * 通知返回的数据
     *
     * @return true 表示收到的通知符合校验,继续发送数据
     *         false 表示收到的通知不符合校验,停止发送数据
     */
    fun verifyNotificationData(
        currentIndex: Int,
        targetIndex: Int,
        currentSendData: ByteArray,
        characteristic: BluetoothGattCharacteristic,
        notificationData: ByteArray
    ): Boolean

    /**
     * 等待通知数据超时
     * @return true  表示强制继续发送数据
     *         false 表示停止发送数据
     */
    fun waitNotifyTimeout(currentIndex: Int, targetIndex: Int, currentSendData: ByteArray): Boolean

    /**
     * 发送中断，有以下可能性
     * 1. 通知校验失败
     * 2. 通知接收超时，并且返回false
     * 3. 需要接收通知数据的特征无通知权限
     * 4. 需要写入数据的特征无写入权限
     * 5. 无法开启需要接收通知数据的特征通知功能
     */
    fun sendIntercept(currentIndex: Int, targetIndex: Int, bytes: ByteArray)

    /**
     * 发送完成
     */
    fun sendFinish()

}